// 对axios再做一次处理

// 创建实例时配置默认值
const http = axios.create({
  // 接口服务器的基准地址
  baseURL: 'http://ajax-api.itheima.net',
  // 当向服务器请求时间超过5000ms,会自动断开请求
  timeout: 5000
});

// 拦截器：在请求或响应被 then 或 catch 处理前拦截它们。

// 请求拦截器
http.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  const token = sessionStorage.getItem('student-token')
  // 有token且需要携带token的请求接口，在配置项的请求头中携带
  if (token) {
    config.headers = {
      Authorization: token
    }
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 响应拦截器
http.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据剥离外层不需要的data
  return response.data;
}, function (err) {
  // 超出 2xx 范围的状态码都会触发该函数。
  if (err.response && err.response.status === 401) {
    // token失效(没有携带、伪造token、token过期)，让用户重新登录
    // 提示信息
    message('token失效了', 'error')
    // 删除原有缓存的数据
    sessionStorage.removeItem('student-token')
    sessionStorage.removeItem('user')
    // 跳到登录页
    redirect('/login.html')
    return
  }
  // 对响应错误做点什么
  if (err.response && err.response.data && err.response.data.message) {
    message(err.response.data.message, 'error')
  }
  return Promise.reject(err);
});